<?php

namespace framework\support;

class Redis
{
    private static $_instance = null;
    private static  $redis = null;
    private static  $prefix = "";
    /**
     * Single constructor. 私有的构造方法
     */
    private function __construct()
    {;
    }

    /**
     * @purpose: 创建__clone方法防止对象被复制克隆
     */
    private function __clone()
    {
        // E_USER_ERROR只能通过trigger_error($msg, E_USER_ERROR)手动触发。
        // E_USER_ERROR是用户自定义错误类型，可以被set_error_handler错误处理函数捕获，允许程序继续运行。
        // E_ERROR是系统错误，不能被set_error_handler错误处理函数捕获，程序会退出运行
        trigger_error('Clone is not allow!', E_USER_ERROR);
    }


    /**
     * @return Single|Object 单例方法,用于访问实例的公共的静态方法
     */
    public static function getInstance()
    {
        if (!(self::$_instance instanceof self)) {
            self::$_instance = new self;
            $host = getenv('REDIS_HOST') ?? '127.0.0.1';
            $port = getenv('DREDIS_PORT') ?? '6379';
            $db = getenv('DREDIS_DB') ??0;
            self::$prefix = getenv('REDIS_PREFIX') ?? '';
            if ($host) {
                self::$redis = new \Redis();
                self::$redis->connect($host, $port);
                self::$redis->select($db);
            }
        }
        return self::$_instance;
    }

    public static function getRedis()
    {
        return self::$redis;
    }

    public static function set()
    {
        $args = func_get_args();
        return self::$redis->set(...$args);
    }

    public static function setEx()
    {
        $args = func_get_args();
        return self::$redis->setex(...$args);
    }

    public static function get()
    {
        $args = func_get_args();
        return self::$redis->get(...$args);
    }

}
